02. 标签

到目前为止,我们在这门课程中学习的都是具体的 git 命令。我们详细了解了这些命令的工作方式,以及在终端上运行这些命令后的输出结果。

现在我们从宏观层面了解下 git 标签在仓库中的作用。

Nd016 WebND Ud123 Gitcourse BETAMOJITO L5 03 打标签概述

目前所处的位置

你可以在任一项目中执行这些步骤,我将在 new-git-project 项目中执行。

我们来看看该项目到目前为止的 git log 输出结果:

_终端显示运行 `git log --oneline` 后的输出结果。_

终端显示运行 git log --oneline 后的输出结果。

git tag 命令

注意所显示的结果(只需注意 SHA 和 commit 消息)

我们将使用 git tag 命令与仓库的标签进行交互:

$ git tag -a v1.0

上述命令将打开代码编辑器,并等待你为标签输入信息。输入"Ready for content"怎么样?

_代码编辑器正在等待提供标签信息。_

代码编辑器正在等待提供标签信息。

注意:在上述命令 ( git tag -a v1.0 ) 中,使用了 -a 选项。该选项告诉 git 创建一个带注释的标签。如果你没有提供该选项(即 git tag v1.0 ),那么它将创建一个轻量级标签。

建议使用带注释的标签,因为它们包含了大量的额外信息,例如:

  • 标签创建者
  • 标签创建日期
  • 标签消息

因此,你应该始终使用带注释的标签。

验证标签

保存并退出编辑器后,命令行上什么也不会显示。那么如何知道已经向项目中添加了标签呢?只需输入 git tag ,命令行会显示仓库中的所有标签。

_终端显示了 `git tag` 命令的输出结果,并列出了 `v1.0` 标签。_

终端显示了 git tag 命令的输出结果,并列出了 v1.0 标签。

我们已经验证了该标签位于仓库中,但是我们想知道它位于仓库的哪个位置。为此,我们需要调用一直在使用的 git log

能看到标签吗?

根据你对 git log 命令的了解,能在日志输出中看到标签吗?

SOLUTION:

git log 的 --decorate 选项

正如你所了解的, git log 是一个非常强大的工具,可以让我们查看仓库的 commit。我们已经学习了几个选项,现在该学习一个新的选项了。 --decorate 选项将显示默认视图隐藏起来的一些详情。

马上去试试运行 git log --decorate 吧!

💡 Git 2.13 中 --decorate 选项的变化 💡

在 2.13 版 git 中, log 命令已改为自动启用 --decorate 选项。这意味着,你不需要在命令中包含 --decorate 选项,因为它已经自动包含了!因此下面的命令输出结果完全一样:

$ git log --decorate
$ git log

请参阅 2.13 版本说明 - 英

_终端显示了 `git log --decorate` 命令的输出结果。现在的日志输出显示了新建的标签。_

终端显示了 git log --decorate 命令的输出结果。现在的日志输出显示了新建的标签。

标签信息位于第一行的末尾:

commit 6fa5f34790808d9f4dccd0fa8fdbc40760102d6e (HEAD -> master, tag: v1.0)

看见输出结果显示的 tag: v1.0 了吗?这就是标签!标签与 commit 相绑定。因此,该标签与 commit 的 SHA 位于同一行。

HEAD -> master?

你是否注意到,日志中除了显示标签信息之外, --decorate 还显示了 HEAD -> master ?这是关于分支的信息!接下来我们将了解 git 中的分支。

删除标签

如果将标签消息中的某个字打错了,或标签名称打错了(输入 v0.1 ,而不是 v1.0 ),如何修正这个错误?最简单的方法是删除这个标签并重新创建。

可以通过输入 -d 选项 (表示 delete 删除!)加上标签名称来删除 git 标签:

$ git tag -d v1.0

_终端显示了使用 `-d` 选项删除某个标签。所运行的命令为 `git tag -d v1.0`。_

终端显示了使用 -d 选项删除某个标签。所运行的命令为 git tag -d v1.0

标签在哪里?

默认情况下,git 标签不会出现在日志中。哪一选项用于在 git log 的输出中显示标签信息?

SOLUTION: --decorate

删除该标签?

下面的哪个命令将删除标签 v-1

SOLUTION: git tag -d v-1

向以前的 commit 添加标签

运行 git tag -a v1.0 将为最近的 commit 添加标签。但是如果你想向仓库中很久之前的 Commit 添加标签呢?

只需提供要添加标签的 commit 的 SHA 即可!

$ git tag -a v1.0 a87984

(在弹出代码编辑器以便让你提供标签消息之后)此命令将向 SHA 为 a87084 的 commit 添加标签 v1.0 。借助这一技巧,你可以为整个 git 仓库中的任何 commit 添加标签!很强大吧?并且只需在你已经知道的 git 标签命令中加上 commit 的 SHA 即可。

对以前的 commit 添加标签?

QUESTION:

根据以下 git log --oneline 信息,要向提交说明为 "style page header" 的 commit 添加标签 beta ,你会运行哪个命令?

2a9e9f3 add breakpoint for large-sized screens
137a0bd add breakpoint for medium-sized screens
c5ee895 add space around page edge
b552fa5 style page header
f8c87c7 convert social links from text to images

SOLUTION:

NOTE: The solutions are expressed in RegEx pattern. Udacity uses these patterns to check the given answer

git tag 小结

总结下, git tag 命令用来标记特定的 commit 。当添加新的 commit 时,标签不会移动。

$ git tag -a beta

此命令将:

  • 向最近的 commit 添加标签

  • 如果提供了 SHA,则向具体的 commit 添加标签

深入研究